Python网络爬虫实现数据爬取实例

  • 1.环境准备
  • 2.准备User Agent
  • 3.网站分析
  • 4.代码编写
  • 5.完整代码
  • 6.参考文章


1.环境准备

由于我无法访问到Python的官网,于是在网上随便下载了一个.exe文件,安装时可以勾选配置环境路径,就不用自己配置了,版本是3.9.1。

用python爬取排名榜 python爬取例子_数据


这次我们主要使用的是Python3的requests和BeautifulSoup4两个库,可以通过pip命令进行安装,这里注意pip命令直接在用户的路径下使用即可。

pip install requests
pip install beautifulsoup4

如果是第一次使用,还需要用pip install lxml 安装 lxml库

2.准备User Agent

直接在百度中搜索,可以看到很多的在线查询工具,User Agent相当于一个身份,表明你是网站的一个访问者,我这次用的是UA查询

用python爬取排名榜 python爬取例子_User_02

3.网站分析

这次的目标网站是车主之家,我想对某地所有宝马4s店的信息进行收集,包括4s店的名称和联系方式,浏览器是Chrome。

用python爬取排名榜 python爬取例子_User_03


我们按下F12可以看到网页的代码,选择代码块浏览器会把对应页面结构标注出来,如图

用python爬取排名榜 python爬取例子_数据_04


查看要爬取的信息对应的代码,在这里是4s店列表,可以看到每个4s店的模块对应着一个dl标签

用python爬取排名榜 python爬取例子_User_05


可以看到公司的名字存储在class=title的div下的a标签中

用python爬取排名榜 python爬取例子_数据_06


电话号码存储在class="camp clearfix"的div下的em标签中。

用python爬取排名榜 python爬取例子_python_07


对URL进行分析发现这里面的page的值代表了列表的页码,这个网站每页会显示20个公司。

用python爬取排名榜 python爬取例子_爬虫_08

4.代码编写

这里会对代码逐段分析,最后我会附上完整的代码
(1)引入requests库

#导入http请求库requests
import requests

(2)定义两个变量来指定UA信息,上面是分析到的,下面headers不用修改。

user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36'
headers = {'User-Agent':user_agent}

(3)通过for循环对每一页进行爬取,该地区有4页则循环由1到5,定义一个rows列表来保存结果。

rows=[]
for i in range(1,5):

(4)requests.get()方法读取网页,这里是将索引i对应到URL的{}之中,可以在每一次循环中访问不同的页码。

r = requests.get('http://dealer.16888.com/?tag=search&pid=31&brandId=57248&page={}'.format(i),headers = headers)

(5)创建一个名为soup的BeautifulSoup实例

from bs4 import BeautifulSoup
    soup = BeautifulSoup(r.text, 'lxml', from_encoding='utf8')

(6)通过soup实例对需要爬取的标签进行筛选,find_all方法的两个参数是标签名和标签类。返回值是一个标签的列表。

companys = soup.find_all('div',class_='title')
    phones = soup.find_all('div',class_='camp clearfix')

(7)对companys列表进行循环。将company中对应的a标签的字符串和对应的phone中的em标签的值作为一个字符数组列表存入rows中,

j = 0
    	for company in companys:
        	a=company.find('a')
        	first = phones[j].select('em:nth-of-type(1)')
        	row=[a.string,first]
        	j=j+2
        	#调用append方法存入
        	rows.append(row)

(8)引入csv库,csv是一种表格文件,将数据写入csv。writerow插入一条数据,writerows插入一组数据。

import csv as csv
place='浙江'
header=['公司-'+place,'电话号']
with open ('D:\\paqushuju\\数据.csv','a+',encoding = 'gb18030') as f:
    f_csv=csv.writer(f)
    f_csv.writerow(header)
    f_csv.writerows(rows)

结果如下:

用python爬取排名榜 python爬取例子_用python爬取排名榜_09

5.完整代码

一定要注意Python语言的缩进,因为Python是通过缩进标识代码结构的,缩进不要用空格,用TAB。

#导入http请求库requests
import requests
import re
#指定我们的user agent
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36'
headers = {'User-Agent':user_agent}
# requests.get()方法读取网页
rows=[]
for i in range(1,5):
    r = requests.get('http://dealer.16888.com/?tag=search&pid=31&brandId=57248&page={}'.format(i),headers = headers)
    from bs4 import BeautifulSoup
    #创建一个名为soup的实例
    soup = BeautifulSoup(r.text, 'lxml', from_encoding='utf8')
    companys = soup.find_all('div',class_='title')
    phones = soup.find_all('div',class_='camp clearfix')
    j = 0
    for company in companys:
        a=company.find('a')
        first = phones[j].select('em:nth-of-type(1)')
        row=[a.string,first]
        print(row)
        print(j)
        j=j+2
        rows.append(row)

import csv as csv
place='浙江'
header=['公司-'+place,'电话号']
with open ('D:\\paqushuju\\数据.csv','a+',encoding = 'gb18030') as f:
    f_csv=csv.writer(f)
    f_csv.writerow(header)
    f_csv.writerows(rows)