结果图###
代码展示###
#!/usr/bin/env python
#-*- coding: utf-8 -*-
from bs4 import BeautifulSoup
import requests
url = 'http://sh.xiaozhu.com/fangzi/2849194363.html'
pic_lib = []
def get_text(item):
return '' if item == 0 else ''.join(item[0].get_text().replace('\n',''))
def get_pic(items):
item_lib=[]
if items == 0:
return (item_lib)
else:
for item in items:
item_lib.append(item.get('data-bigimg').replace('00,800,533','11'))
return (item_lib)
def get_gender(item):
if item == 0 :
return ''
else :
if 'girl' in str(item[0].get('class')) :
return ('女房东')
else:
return ('男房东')
web_data = requests.get(url)
soup = BeautifulSoup(web_data.text,'html.parser')
titles = soup.select('div.pho_info > h4 > em')
areas = soup.select('div.pho_info > p > span.pr5')
prices = soup.select('span.detail_avgprice')
pics = soup.select('div.pho_show_r > div > ul > li > img')
names = soup.select('div.w_240 > h6 > a')
genders =soup.select('h6 > span')
data={
'titles' : get_text(genders),
'areas' : get_text(areas),
'prices' : get_text(prices),
'names' : get_text(names),
'pics' : get_pic(pics),
'genders' : get_gender(genders)
}
print (data)
问题总结###
1.在爬取图片的时候,
PC端显示的地址为:http://image.xiaozhustatic2.com/00,800,533/6,0,0,646,1799,1200,38baf736.jpg
模拟移动端的地址为:
http://image.xiaozhustatic2.com/11/6,0,51,625,1799,1200,f02a7f1d.jpg
经过观察后可以看出来不同,并用repalce('','')做处理。
更好的处理方式应该是用正则。
2.在爬取移动端的时候,并无法确定到title的位置,推测可能是JS控制的。
解决方式:在network里面的找相关的response。
只需要搜索:index?jsonp
其中一个是房东所有的信息,注意甄别
在这个里面隐藏着一些信息......