定位一个元素,要找它唯一性的特征。
有反爬虫机制的网站可以考虑移动版本。
以下是小猪短租的作业
# coding:utf-8
from bs4 import BeautifulSoup
import requests
import pandas as pd
import time
# 创建几个容器
subpage_list = []
all_data = pd.DataFrame(columns = ['标题', '地址', '租金', '房屋照片', '房东照片', '房东性别', '房东名字'])
n = 0
# 这个循环获取30个网页中的子页面地址
for i in range(1,14):
print("正在爬取第{}个主页".format(str(i)))
#time.sleep(0.5)
url = 'http://bj.xiaozhu.com/search-duanzufang-p{}-0/'.format(str(i))
html = requests.get(url).text
soup = BeautifulSoup(html,'lxml')
subpage = soup.select('#page_list > ul > li > a')
for i in subpage:
subpage_list.append(i.get('href'))
for url in subpage_list:
# 子页面爬虫部分
#time.sleep(0.5)
data =[]
print("正在爬取第{}个信息".format(n))
html = requests.get(url).text
soup = BeautifulSoup(html, 'lxml')
title = soup.select('body > div.wrap.clearfix.con_bg > div.con_l > div.pho_info > h4 > em')
address = soup.select('body > div.wrap.clearfix.con_bg > div.con_l > div.pho_info > p > span.pr5')
rent = soup.select('#pricePart > div.day_l > span')
img = soup.select('#curBigImage')
landlord_img = soup.select('#floatRightBox > div.js_box.clearfix > div.member_pic > a > img')
landlord_sex = soup.select('#floatRightBox > div.js_box.clearfix > div.member_pic > div')
landlord_name = soup.select('#floatRightBox > div.js_box.clearfix > div.w_240 > h6 > a')
# 把爬取到的信息放到列表中
data.append(title[0].get_text())
data.append(address[0].get_text()[:-35]) #这个切片用来去掉换行符,如果报错去掉字符串切片。
data.append(rent[0].get_text())
data.append(img[0].get('src'))
data.append(landlord_img[0].get('src'))
if landlord_sex[0].get('class')[0] == 'member_ico1':
data.append('女')
elif landlord_sex[0].get('class')[0] == 'member_ico':
data.append('男')
else:
data.append('不明')
data.append(landlord_name[0].get_text())
all_data.loc[n] = data
n += 1
# 把DataFrame中的数据导出到本地
all_data.to_csv('F:\\data.csv')
print('文件已成功保存')