爬取静态网站信息公司名称以及电话

news/2024/5/20 12:31:22/文章来源:https://blog.csdn.net/WSRY_GJP/article/details/105371002

文章目录

        • 爬虫需求:
          • 需要爬取的网站 [目标网站](http://shop.jc001.cn/r1-231/?p=1)
          • 爬取内容:需要爬取网站的公司名称以及电话
          • 该网站有6000多条信息
        • 爬虫思路解析
          • 1.封装函数获取网站所有页码
          • 2.通过获取页面的url去解析获取每一个详情页的url
          • 3.网站详情页请求以及解析
            • 3.1详情页请求函数
            • 3.2详情页解析函数(解析需要内容,并存储)
            • 3.3详情页解析总函数
          • UA伪装以及代理IP
          • 最终结果

爬虫需求:

需要爬取的网站 目标网站
爬取内容:需要爬取网站的公司名称以及电话

公司名称在列表页
在这里插入图片描述联系方式在详情页
在这里插入图片描述

该网站有6000多条信息

在这里插入图片描述
1.考虑到网站信息太多,不能使用简单的爬虫请求页面,需要考虑到单个ip无法满足要求,网站访问次数过多,会被网站反爬机制封ip
2.单个程序请求页面,还要解析,单线程太慢

爬虫思路解析

事先导入需要用的模块

import random
import requests
from lxml import etree
from concurrent.futures import ProcessPoolExecutor, ThreadPoolExecutor
import time
1.封装函数获取网站所有页码
def get_pageurl(start, page_len, url):""":param start: 起止页码:param page_len: 页码个数:param url: 网站模板url:return: """print('****************开始获取取页面URL****************')i = startj = 0url_list = []while j <= page_len:#网站页码规律 模板url http://shop.jc001.cn/r1-231/?p=# j为页码数   url_full= 'http://shop.jc001.cn/r1-231/?p=' +页码数url_full = url + str(i)url_list.append(url_full)i += 1j += 1else:print('****************已爬取页面URL****************')return url_list
2.通过获取页面的url去解析获取每一个详情页的url

在这里插入图片描述

def get_allurls(url_list):print('****************开始爬取商家页面URL****************')# 集合用来存储不重复的所有详情页的urlall_urls = set()count = 0for page_url in url_list:page_text = requests.get(url=page_url, headers=header,proxies={"http": random.choice(proxy_ip)}).texttree = etree.HTML(page_text)#解析每个页面所包含的详情页的urla_list = tree.xpath('/html/body/div[8]/div[2]/div[2]/table/tbody/tr/td[1]/a/@href')for a in a_list:# a = "http:" + aall_urls.add(a)count += 1print('****************已爬取 %s 家商家页面URL****************' % count)return all_urls
3.网站详情页请求以及解析

首先网站详情页6000多张 ,不可能网站一张张的去请求,这样花费时间非常多,而且由于ip的访问频率限制,在请求的时候还需要设置请求间隔,以防单个ip请求速度过快导致ip被封,所以这里需要用到多线程

3.1详情页请求函数

这里注意一点,一定要使用异常模块,想一想发生异常就要抛出一面红看着就难受,所以这里使用异常模块,单个线程执行速度很快
time.sleep(0.5) random.choice(proxy_ip) 都是是为了防止单个ip每秒内访问服务器次数太多导致ip不可用。

def get_page(detail_url):time.sleep(0.5)try:response = requests.get(detail_url, headers=header, proxies={"http": random.choice(proxy_ip)}, timeout=5).textexcept Exception as e:response = ' 'return {'url': detail_url, 'text': response}
3.2详情页解析函数(解析需要内容,并存储)
def parase_page(res):# parse_page拿到的是一个future对象obj,需要用obj.result()拿到结果res = res.result()page_text = res.get('text')try:if page_text:tree = etree.HTML(page_text)name = tree.xpath('/html/body/div[2]/div[1]/div[1]/div/h3/a/text()')[0]num = tree.xpath('//div[@class="cnt line"]/table//tr[3]/td//text()')[0].strip('\xa0')with open('xiaogan.txt', 'a', encoding='utf-8') as f:f.write('%s|%s\n' % (name, num))except Exception as e:print(e)
3.3详情页解析总函数
def get_information(all_urls):print('****************开始爬取所有公司名称电话****************')#线性池  15个线程同时执行p = ThreadPoolExecutor(15)for detail_url in all_urls:#add_done_callback(parase_page) 回调函数 执行完请求就回调解析模块p.submit(get_page,detail_url).add_done_callback(parase_page)
UA伪装以及代理IP

代理ip是在快代理上购买的私密ip

#UA伪装
header = {"user-agent": "Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",'Connection': 'close',"Accept-Encoding": "Gzip",
}
#代理ip
#proxy_ip是一个包含30个代理ip的列表
api_url = "http://dps.kdlapi.com/api/getdps/?orderid=958623468831485&num=30&pt=1&format=json&sep=1"
proxy_ip = requests.get(api_url).json()['data']['proxy_list']

调用函数开始执行

url = "http://shop.jc001.cn/r1-239/?p="
url_list = get_pageurl(1,49, url)
all_urls = get_allurls(url_list)
print(all_urls)
get_information(all_urls)
最终结果

上面程序是运行一次可以爬取1000条资料,运行速度也很快,15线程同时运行
在这里插入图片描述
在这里插入图片描述
从代理ip网站后台可以看到程序的响应数很高

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_832204.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

爬取动态网站阿里巴巴(1688)商家公司名称及联系方式

爬取动态网站阿里巴巴&#xff08;1688&#xff09;商家信息 文章目录爬取动态网站阿里巴巴&#xff08;1688&#xff09;商家信息&#xff08;一&#xff09;爬虫需求&#xff1a;1.目标网站&#xff1a;[阿里巴巴](https://s.1688.com/)2. 爬取阿里巴巴网站上供应商的商家的联…

java处理高并发高负载类网站的优化方法

java处理高并发高负载类网站的优化方法 转&#xff1a;http://blog.csdn.net/dengsilinming/article/details/9117735一&#xff1a;高并发高负载类网站关注点之数据库没错,首先是数据库,这是大多数应用所面临的首个SPOF。尤其是Web2.0的应用&#xff0c;数据库的响应是首先要解…

使用Xcache缓存器加速你的PHP网站

由于国内网站备案比较麻烦&#xff0c;所以笔者便把网站放到了香港。虽然网站免去了备案的困扰&#xff0c;但是从访问速度上来看&#xff0c;一般要比放于国内的网站慢2-3倍&#xff0c;所以便想办法对网站做了一些简单的优化&#xff0c;比如使用缓存系统来提升网站页面访问速…

大型网站架构演变和知识体系

1、架构演变第一步&#xff1a;物理分离webserver和数据库 2、架构演变第二步&#xff1a;增加页面缓存 如用squid做页面缓存&#xff0c;或生产静态页面&#xff0c;不使用jsp 3、架构演变第三步&#xff1a;增加页面片段缓存 页面缓存失效情况比较多&#xff0c;因此可以使…

网站页面性能优化的35条黄金守则

1. Make fewer HTTP requests 尽可能少的http请求。。我们有141个请求&#xff08;其中15个JS请求&#xff0c;3个CSS请求&#xff0c;47个CSS background images请求&#xff09;&#xff0c;多的可怕。思考了下&#xff0c;为什么把这个三种请求过多列为对页面加载的重要不利…

web服务器添加网站win8,Win8系统配置局域网web服务器的方法

在win8系统中&#xff0c;我们可以通过配置web服务器来将信息实现互通&#xff0c;可以放置网页让局域网内浏览等&#xff0c;那么在win8系统中要怎么配置配置局域网web服务器呢&#xff1f;下文给大家分享一下Win8系统配置局域网web服务器的方法。1、首先在win8系统中打开电脑…

如何用合作的态度来提升网站收录与排名?

合作共赢&#xff0c;这个词被应用到各行各业是不无道理的&#xff0c;在SEO行业里同样如此。 在多年前&#xff0c;那是SEO飞速发展的时代&#xff0c;我们见证了许许多多的SEO神话&#xff0c;各种各样一夜暴富的神人&#xff0c;但为什么近几年这样的神话越来越少? 这个问题…

如何利用链接诱饵来为网站获取强大的流量?

相信大家在优化网站的时候会遇到这样的问题&#xff0c;网站怎么优化都没有效果&#xff0c;排名一些掉&#xff0c;而且&#xff0c;做了外链效果不太行&#xff0c;买卖链接似乎效果平淡&#xff0c;这个时候&#xff0c;我们到底要用什么方法来改变网站的现状&#xff0c;提…

本地运行php和html文件,从本地html / javascript网站发布到在线PHP文件

我想做什么从本地html / javascript网站发布到在线PHP文件。问题当我尝试使用下面的代码时&#xff0c;我不断收到以下提到的错误。背景&#xff1a;该网站旨在在本地运行。由于要由每个用户选择使用哪种浏览器&#xff0c;因此我希望找到一种可以解决上述问题的方法&#xff0…

PHP爬取网站内容

最近公司需要存在阿里云对象存储&#xff08;oss&#xff09;里的视频文件&#xff0c;而且需要18套课程的视频源文件&#xff0c;这周就要&#xff0c;我想了一下这要是一个一个找那可就麻烦了。要想想一套课程有n个章节&#xff0c;每个章节有n个视频文件。所以我下定决心要写…

wamp控制下多目录挂网站

图片&#xff1a; 前几天有个网上一起看php100视频学习php的朋友问我怎么在wamp上不同目录挂多个网站&#xff0c;我在网上搜了下资料&#xff0c;自己琢磨了一下午&#xff0c;现在把自己的方法公布出来&#xff0c;欢迎大家指正。也希望大家有更好的办法也公布出来。 以下方…

一种常见网站布局的实现

一种常见布局&#xff08;上方显示单元列表链接&#xff0c;左边显示分类链接&#xff09;的实现 很多网站有一种布局&#xff0c;就是在页面上方显示单元的列表&#xff08;可能是这样&#xff0c;也可以加其它的链接&#xff09;&#xff0c;用户单击某个单元的链接后产生的新…

任意网站支持RSS

说好的metal咋出锅了啊? 今天本来想分享metal还有一些东西在整理,就先分享一个好玩的东西,我们有时候想关注一个不错的学习网站在有更新的时候第一时间知道, 有的网站还不支持RSS, 这可能用Feed43blogtrottr这两个工具了 1,就会在此页面有内容更新。然后 打开 Feed43&#xf…

以电商网站为例,谈大型分布式架构设计与优化

本文大纲&#xff1a; 1. 使用电商案例的原因 2. 电商网站需求 3. 网站初级架构 4. 系统容量估算 5. 网站架构分析 6. 网站架构优化 本文主题为电商网站架构案例&#xff0c;将介绍如何从电商网站的需求&#xff0c;到单机架构&#xff0c;逐步演变为常用的、可供参考的分布式架…

大型php网站性能和并发访问优化方案(转载自php中文网)

网站性能优化对于大型网站来说非常重要&#xff0c;一个网站的访问打开速度影响着用户体验度&#xff0c;网站访问速度慢会造成高跳出率&#xff0c;小网站很好解决&#xff0c;那对于大型网站由于栏目多&#xff0c;图片和图像都比较庞大&#xff0c;那该怎么进行整体性能优化…

你想学的一切,只需要这一个网站就够了

简评&#xff1a;这个网站叫 Learn Anything&#xff0c;最终形态是「人们想要搜索什么知识&#xff0c;都会获得最高效且适合自己的学习路径&#xff0c;知识图谱」。现在网站刚刚建立不久&#xff0c;还处于比较初期&#xff0c;是个开源项目&#xff0c;大家有兴趣可以参与一…

程序员业余必去的六个网站!

工作了半年后&#xff0c;觉得自己的能力毫无提升的方式&#xff1f;作做好本职工作之外&#xff0c;不妨多去接一些私活&#xff0c;除了提升自己的技能之外&#xff0c;也让收入再上一层&#xff0c;何乐不为&#xff1f; 平台 0.程序员客栈 https://www.proginn.com/ 主要雇…

用xampp 和wordpress 搭建本地网站

你好&#xff0c;从今天开始&#xff0c;我将为大家带来一些我学习SEO和建站的免费教程&#xff0c;今天为大家带来的是如何用XAMPP搭建一个属于你自己的网站。来到这里&#xff0c;可以说很多在百度上已经过时了的资料需要总结的资料这里都有&#xff0c;你只要按照我的教程来…

Ruby on Rails 简介。来自于一个台湾网站,某些术语与大陆翻译不同

转:https://ihower.tw/rails4/intro.html Ruby on Rails 簡介 “Life’s too short to build something nobody wants” - Ash Maurya, Running Lean 作者 Ruby on Rails是一套非常有生產力、維護性高、容易佈署的Web開發框架。從一開始不知名的玩具&#xff0c;到現在它已經成…

大型网站技术架构(五)网站高可用架构

2019独角兽企业重金招聘Python工程师标准>>> 网站的可用性&#xff08;Avaliability&#xff09;描述网站可有效访问的特性。 1、网站可用性的度量与考核 网站不可用时间&#xff08;故障时间&#xff09;故障修复时间点-故障发现&#xff08;报告&#xff09;时间点…