今天小五给大家分享一篇爬虫:
随着人们生活方式的的提高,房子成为了我们必不可少的一部分。而网上的信息太过于复杂,为了了解最近房价的变化趋势。小编以链家这个网站为例,抓取房价的信息。
实现将获取到的房子的名字、价格、房子的关注度,导入Word模板,并生成独立的Word文档。
先列出网址,如下所示。
网址:https://bj.lianjia.com/ershoufang/pg1/("bj"北京的缩写)
库:requests、time 、lxml
如何对下一页的网址进行请求?
点击下一页的按钮,观察到网站的变化分别如下:
https://bj.lianjia.com/ershoufang/pg1/
https://bj.lianjia.com/ershoufang/pg2/
https://bj.lianjia.com/ershoufang/pg3/
观察到只有pg()变化,变化的部分用{}格式化代替,再用for循环遍历这网址,实现多个网址请求。
1.我们定义一个class类继承object,然后定义init方法继承self,再定义一个主函数main继承self。准备url地址和请求头headers。
import requests
from lxml import etree
import time
class LianJia(object):
def __init__(self):
pass
def main(self):
pass
if __name__ == '__main__':
spider= LianJia()
spider.main()
2.对网站发生请求
def __init__(self):
self.url = "https://bj.lianjia.com/ershoufang/pg{}/"
self.headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
}
# 请求数据
def get_page(self,url):
html = requests.get(url=url,headers=self.headers).content.decode("utf-8")
# print(html)
self.page_page(html)
# 数据处理
def page_page(self,html):
parse_html = etree.HTML(html)
page = parse_html.xpath('//*[@id="content"]/div[1]/ul/li')
house_dict = {}
for li in page:
house_dict['名称']=li.xpath('.//div[@class="infoclear"]//div[@class="title"]/a/text()')[0].strip()
house_dict["价格"] = li.xpath(".//div[@class='priceInfo']/div[@class='totalPrice']/span/text()")[0].strip()+"万"
house_dict["关注度"] = li.xpath('.//div[@class="info clear"]//div[@class="followInfo"]//text()')[0].strip()
f = open('房子.doc', 'a', encoding = 'utf-8') # 以'w'方式打开文件
f.write(str(house_dict))
print(house_dict)
f.write("\n") # 键和值分行放,键在单数行,值在双数行
f.close()
def main(self):
for pg in range(1 ,101): #for遍历得到的网址
url = self.url.format(str(pg))
print(" = " *50)
time.sleep(1.4) #时间延时
本文转自公众号【Python爬虫与数据挖掘】
由朱小五重新排版整理