一个简单的Python实现数据爬取实例

1.环境准备

由于我无法访问到Python的官网,于是在网上随便下载了一个.exe文件,安装时可以勾选配置环境路径,就不用自己配置了,版本是3.9.1。在这里插入图片描述
这次我们主要使用的是Python3的requests和BeautifulSoup4两个库,可以通过pip命令进行安装,这里注意pip命令直接在用户的路径下使用即可。

pip install requests
pip install beautifulsoup4

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

2.准备User Agent

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

3.网站分析

这次的目标网站是车主之家,我想对某地所有宝马4s店的信息进行收集,包括4s店的名称和联系方式,浏览器是Chrome。
在这里插入图片描述
我们按下F12可以看到网页的代码,选择代码块浏览器会把对应页面结构标注出来,如图
在这里插入图片描述
查看要爬取的信息对应的代码,在这里是4s店列表,可以看到每个4s店的模块对应着一个dl标签
在这里插入图片描述
可以看到公司的名字存储在class=title的div下的a标签中
在这里插入图片描述
电话号码存储在class="camp clearfix"的div下的em标签中。
在这里插入图片描述
对URL进行分析发现这里面的page的值代表了列表的页码,这个网站每页会显示20个公司。
在这里插入图片描述

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)

结果如下:
在这里插入图片描述

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)

6.参考文章

https://blog.csdn.net/weixin_42156897/article/details/94581362
https://blog.csdn.net/weixin_42156897/article/details/94594753

  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值