1.模块名称:generate_url()
1.1 功能介绍
负责批量生成要爬取的url数据
1.2 界面截图或数据分析截图
1.3 代码截图
def generate_url():
urls = []
for i in range(1, 70):
urls.append(urlStart + str(i) + urlEnd)
return urls
2.模块名称:parse_href()
2.1 功能介绍
本爬虫的核心爬取模块,负责具体地完成对各项房源数据的爬取(使用了PyQuery库,可以以类似于文件路径的形式更加方便地匹配各种想要爬取的网页元素)
2.2 界面截图或数据分析截图
2.3 代码截图
def parse_href(page_url):
tc_head = { # 构造请求头
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Host': 'xm.58.com',
'Referer': 'https://xm.58.com/house.shtml?PGTID=0d3090a7-0025-e965-cac6-770c2149aa65&ClickID=2',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
}
response = requests.get(url=generate_url,headers=tc_head)
if response.status_code == 200:
response.encoding = response.status_code
html = response.text
doc = pq(html)
lis = doc('body > div.mainbox > div > div.content > div.listBox > ul > li') # 通过JS路径匹配要爬取的元素
for value in lis.items():
url = value('div.des > h2 > a').text()
name = value('div.des > h2').text()
info = value('div.des > p.room.strongbox').text()
add = value('div.des > p.add > a:nth-child(1)').text() + value('div.des > p.add > a:nth-child(2)').text()
rent = value('div.listliright > div.money > b')
data = {
"房源链接": url,
"房源名称": name,
"房源信息": info,
"房源地址": add,
"房源租金": rent
}
print(data)
else:
print("Request Fail")
3.总结
1.可以看出58同城部署了反爬措施,重要的租房数据已经使用了复杂的文字作为遮挡;目前正在寻求解决方法
2.关于数据的保存,目前有以下几种方法:存入.csv文件;存入数据库(MySQL);存入.txt文件
现在正在准备将数据插入数据库进行管理