实现功能
采集页面上所有的城市名称和对应城市的主页链接(房产类网站,为后面获取每个城市的房价信息做准备)
查看源码
打开源码页面后,找到城市的名称和链接的代码,然后写正则。这里用工具先调试好我们写的正则表达式
调试好表达式后,开始写代码。
具体代码
import requests
import re
class beike():
def __init__(self):
self.url = "https://www.ke.com/city/" #初始化一个链接地址
def send_request(self,url):
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.100 Safari/537.36"
}#协议头这里要用字典
response = requests.get(url,headers)#发送请求
response.encoding = "utf8" #编码
data = response.text #读取出源码
self.filter(data) #交给正则提取部分
def filter(self,conetnt):
pat = re.compile(r'click_name=.*?&click_url=.*?&click_location=.*?"><a href="(.*?)">(.*?)</a>')#正则表达式
res = re.findall(pat, conetnt) #匹配正则
for i in res:
redata = i[1] + " : " + "https:"+ i[0] + "\n" #返回的数据是一个列表,这里用循环给提取出来
self.write_file(redata) # 写到文件当中
def write_file(self,data):
with open("beike.html","a",encoding="utf8") as f:
f.write(data)
def start(self):
self.send_request(self.url)
if __name__ == '__main__':
BK = beike()
BK.start()
运行程序后,目录下生成了一个beike.html 文档,里面存放着所有的城市名称和链接地址