网络爬虫学习心得1

542次阅读
没有评论
网络爬虫学习心得1

这段时间看了唐松老师写的《python网络爬虫从入门到实践》,学到许多网络爬虫方面的知识,也以书里的实践项目进行练手。
我的第一篇的网络爬虫心得,就以书里第五章的实践:爬虫实践:房屋价格数据,参考书里的内容进行练手。

实践项目是获取安居客网站上北京二手房的数据。本项目需要获取前10页二手房源的名称、价格、几房几厅、大小、建造年份、联系人、地址、标签。网页地址为:http://beijing.anjuke.com/sale/。
这里我把北京改为了泉州丰泽区。

第一步,网站分析。
和书里介绍的内容一样,网站一页有60个二手房信息,翻页有明显的规则,对于翻页,我写了一个获得页面地址的列表。

link = [] for i in range(1,11): link.append('https://quanzhou.anjuke.com/sale/fengzequ/p'+str(i)+'/#filtersort')

二手房信息的结构,是以每一套房进行展开,包含了房源的名称、价格、几房几厅、大小、建造年份、联系人、地址等相关内容。这些内容对应的标签为:
每一套房源的标签: li class=“list-item over-bg” data-from=""
房源的名称:div class=“house-title” 下的a标签
几房几厅: div class="details-item"下的span
面积大小:div class="details-item"的contents[3]
层高:div class="details-item"的contents[5]
建站年份:div class="details-item"的contents[7]
价格:span,class=“price-det”
单价:span,class=“unit-price”
地址:span,class=“comm-address”

有了这些内容对应的标签,就可以利用BeautifulSoup库的find来找到对应的内容。

第二步,爬虫代码编写
首先,导入requests和BeautifulSoup库

import requests from bs4 import BeautifulSoup

接着,定制请求头,利用for循环生成每个页面的链接

header = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'} link = [] for i in range(1,11): link.append('https://quanzhou.anjuke.com/sale/fengzequ/p'+str(i)+'/#filtersort')

定制requests请求头,利用network找到Hearders。
在定制requests请求头要注意,user-agent后的内容直接从网页拷贝出来会有一个空格,需要去掉,不然会出错。

接下来,爬取房源的数据

要爬取10页的房源数据,需要做一个循环

for n in range(10): r = requests.get(link[n],headers=header,timeout=10) soup = BeautifulSoup(r.text,'lxml')

取每一页的60个房源数据

h_list = soup.find_all('li',class_='list-item') for house in h_list: name = house.find('div',class_='house-title').a.text.strip() room = house.find('div',class_='details-item').span.text.strip() area = house.find('div',class_='details-item').contents[3].text.strip() hight = house.find('div',class_='details-item').contents[5].text.strip() price = house.find('span',class_='price-det').text.strip() pp = house.find('span',class_='unit-price').text.strip() address = house.find('span',class_='comm-address').text.strip() output = 't'.join([name,room,area,hight,price,pp,address])

with open(r'd:house.txt','a+',encoding='utf-8') as f: f.write(output)

这里要注意的是,文件写入是用gbk码写入,爬取数据的有些符号会导致出错,比如空格、平方。需要修改写文件用utf-8格式。

最后放上完整的代码

import requests from bs4 import BeautifulSoup

header = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'} link = [] for i in range(1,11): link.append('https://quanzhou.anjuke.com/sale/fengzequ/p'+str(i)+'/#filtersort')

for n in range(10): r = requests.get(link[n],headers=header,timeout=10) soup = BeautifulSoup(r.text,'lxml')

h_list = soup.find_all('li',class_='list-item') for house in h_list: name = house.find('div',class_='house-title').a.text.strip() room = house.find('div',class_='details-item').span.text.strip() area = house.find('div',class_='details-item').contents[3].text.strip() hight = house.find('div',class_='details-item').contents[5].text.strip() price = house.find('span',class_='price-det').text.strip() pp = house.find('span',class_='unit-price').text.strip() address = house.find('span',class_='comm-address').text.strip() output = 't'.join([name,room,area,hight,price,pp,address])

with open(r'd:house.txt','a+',encoding='utf-8') as f: f.write(output)

通过这个练手实践,基本上能掌握静态页面的爬取。

神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试

相关文章:

版权声明:Python教程2022-10-24发表,共计3589字。
新手QQ群:570568346,欢迎进群讨论 Python51学习