<h2>代码</h2>
<pre>
from bs4 import BeautifulSoup
import requests
def get_lorder_gender(class_name):
if class_name == ['member_boy_ico']:
return "男"
else:
return "女"
def get_links(url):
wb_data = requests.get(url)
请求网址
soup = BeautifulSoup(wb_data.text, 'lxml')
解析网页
links = soup.select('#page_list > ul > li > a')
定位链接
for link in links :
href = link.get("href")
get_detail_info(href)
通过循环得到具体链接,并将值传递给能得到详细数据的函数
def get_detail_info(url):
wb_data = requests.get(url)
soup = BeautifulSoup(wb_data.text,'lxml')
titles = soup.select('body > div.wrap.clearfix.con_bg > div.con_l > div.pho_info > h4 > em')
adresses = soup.select('body > div.wrap.clearfix.con_bg > div.con_l > div.pho_info > p > span.pr5')
prices = soup.select('#pricePart > div.day_l > span')
images = soup.select('#imgMouseCusor')
touxiangs = soup.select('#floatRightBox > div.js_box.clearfix > div.member_pic > a > img')
names = soup.select('#floatRightBox > div.js_box.clearfix > div.w_240 > h6 > a')
genders = soup.select('#floatRightBox > div.js_box.clearfix > div.w_240 > h6 > span')
for title,adress,price,image,touxiang,name,gender in zip(titles,adresses,prices,images,touxiangs,names,genders):
data = {
'title':title.get_text(),
'adress':adress.get_text(),
'image':image.get('src'),
'touxiang':touxiang.get("src"),
'name':name.get_text(),
'gender': get_lorder_gender(gender.get('class'))
}
print(data)
urls = ["http://bj.xiaozhu.com/search-duanzufang-p{}-0/".format(number) for number in range(1,10)]
for single_url in urls:
get_links(single_url)
"""
titles:body > div.wrap.clearfix.con_bg > div.con_l > div.pho_info > h4 > em
adreess:body > div.wrap.clearfix.con_bg > div.con_l > div.pho_info > p > span.pr5
prices:#pricePart > div.day_l > span
name:#floatRightBox > div.js_box.clearfix > div.w_240 > h6 > a
gender:#floatRightBox > div.js_box.clearfix > div.w_240 > h6 > span
touxiang:#floatRightBox > div.js_box.clearfix > div.member_pic > a > img
pics:floatRightBox > div.js_box.clearfix > div.member_pic > a > img
</pre>
<h2>成果</h2>
<h2>总结</h2>
<p>本次作业的目标是爬取“bj.xiaozhu.com(短租网)”300个详情页中“标题、地址、租金、房源图片链接、房东图片链接、房东姓名、性别”。通过分析网页可以发现这些数据需要从2个页面中获取:</p>
第一个是列表页:
在这一页中,操作主要有:
1.用requests请求得到该起始页
2.用BuautifulSoup解析该网页
3.通过观察发现,该网页的图片是同时也是链接,所以主要提取出该页所有图片的链接,并将该链接再次发送给requests和BeautifulSoup。
4.需要翻页,也就意味着需要知道每个列表页的网址。这个网址有特定的规律,通过列表表达式循环得到:
<pre>urls = ["http://bj.xiaozhu.com/search-duanzufang-p{}-0/".format(number) for number in range(1,10)]
for single_url in urls:
get_links(single_url)
</pre>
第二个是详情页:
本页的操作主要有
1.请求网址并解析
2.观察所要爬取内容的标签,并将其记录下来。
3.利用select方法找出这些数据,然后通过get得到具体的信息。
4.利用循环构建字典,将其打印出来。
<h2>反思:</h2>
1.在初学编程的阶段,在编程前首先要思考两个问题:怎么写和些什么?把目标细化成有次序的具体步骤,然后思考一步步该如何具体实现。
2.在编写的过程中,可以明显的感觉到python基础还不是很牢固。尤其是在循环、创建函数上,还需要重温基础。
3.还遇到这个问题,但是不知道问题出在哪里?全部删了重写,问题解决了!