python正则表达式爬取链家租房信息
网址: https://bj.lianjia.com/zufang/
这一次爬虫主要也是使用了正则表达式,具体的流程框架可以参照我的另一篇博
使用正则表达式爬虫抓取猫眼电影排行Top100
其中找正则表达式一定要找准,一定要找到唯一匹配的正则表达式。
还有爬取链家网必须要添加headers
具体代码
import requests
import re
from requests.exceptions import RequestException
import json
import csv
from time import sleep
# 抓取单页内容
def get_one_page(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
}
try:
response = requests.get(url,headers=headers)
response.encoding='utf-8'
if response.status_code == 200:
return response.text
return None
except RequestException:
return None
# 使用正则表达式解析网页
def parse_one_page(html):
pattern = re.compile('<p class="content__list--item--title twoline">.*?>(.*?)</a>.*?'
+'<p class="content__list--item--des">.*?>(.*?)</a>-.*?target="_blank">.*?</a>'
+'.*?<i>/</i>(.*?)<i>/</i>.*?<i>/</i>(.*?)<span class="hide">.*?<span class="content__list--item-price">'
+'<em>(.*?)</em>.*?</span>', re.S)
items = re.findall(pattern,html)
for item in items:
yield {
'小区名称': item[0].strip(),
'地区': item[1],
'面积': item[2].strip(),
'户型': item[3].strip(),
'价格(元/月)': item[4]
}
# 写入并保存至文件
# 保存为txt格式
def write_to_file(content):
with open('lianjiazufang.txt','a',encoding='utf-8') as f:
f.write(json.dumps(content,ensure_ascii=False)+'\n')
f.close()
# 保存为csv格式
# def write_to_file(content):
# with open('result.csv', 'a') as csvfile:
# fieldnames = ['小区名称','地区','面积','户型','价格(元/月)']
# writer = csv.DictWriter(csvfile,fieldnames=fieldnames)
# writer.writeheader()
# # writer = csv.writer(csvfile)
# writer.writerow(content)
# csvfile.close()
# 定义主函数
def main(num):
url = 'https://bj.lianjia.com/zufang/pg'+str(num)
html = get_one_page(url)
for item in parse_one_page(html):
print(item)
write_to_file(item)
if __name__ == '__main__':
for i in range(100):
sleep(1)
print(i)
main(i)
结果演示
可以保存成txt文本也可以生成csv文件