import re import requests from lxml.html import etree url_xpath = '//dd/p[1]/a[1]/@href' title_xpath = '//dd/p[1]/a[1]/@title' data_xpaht = '//dd/p[2]/text()' headers = { 'rpferpr': 'https://sh.zu.fang.com/', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.90 Safari/537.36' } rp = requests.get('https://sh.zu.fang.com/', headers=headers) rp.encoding = rp.apparent_encoding html = etree.HTML(rp.text) url = html.xpath(url_xpath) title = html.xpath(title_xpath) data = re.findall('<p class="font15 mt12 bold">(.*?)</p>', rp.text, re.S) mold_lis = [] house_type_lis = [] area_lis = [] for a in data: a = re.sub('�O', '平方米', a) mold = re.findall('\r\n\s.*?(\S.*?)<span class="splitline">', a) house_type_area = re.findall('</span>(.*?)<span class="splitline">', a) try: mold_lis.append(mold[0]) house_type_lis.append(house_type_area[0]) area_lis.append(house_type_area[1]) except: pass data_zip = zip(title, url, mold_lis, house_type_lis, area_lis) with open('info.txt', 'a', encoding='utf8') as fa: for a in data_zip: fa.write(str(a)) fa.write('\n')
未完待续
后续接着对于分区进行爬取
arpa_dict = { '不限':'house', '浦东':'house-a025', '嘉定':'house-a029', '宝山':'house-a030', '闵行':'house-a018', '松江':'house-a0586', '普陀':'house-a028', '静安':'house-a021', '黄浦':'house-a024', '虹口':'house-a024', '青浦':'house-a024', '奉贤':'house-a024', '金山':'house-a024', '杨浦':'house-a024', '徐汇':'house-a024', '长宁':'house-a024', '崇明':'house-a0996', '上海周边':'house-a01046', }