刚学习了python,中途遇到很多问题,查了很多资料,最关键的就是要善于调试,div信息一定不要找错,下面就是我爬取租房信息的代码:
链家的房租网站
两个导入的包
1.requests 用来过去网页内容
2.BeautifulSoup
import time
import pymssql
import requests
from bs4 import BeautifulSoup #https://bj.lianjia.com/zufan
完整代码如下:
import requests import uuid import time from bs4 import BeautifulSoup from src.request import send as send from src.database import database as database
def requestHtmlData() :
conn = database.initDataConnect()
url = "https://bj.lianjia.com/zufang/pg{0}/#contentList"
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36 Edg/96.0.1054.43'
}
i = 1;
while(1==1):
rurl = url.replace("{0}",str(i))
print("请求地址:"+rurl)
i+=1
if(i>100):
i=1
resp = requests.get(rurl,headers=headers)
#print(resp.text) #网页内容 文本
#print(resp.content.decode('utf-8')) #网页内容 二进制
html=resp.text
soup =BeautifulSoup(html,'html.parser')#解析
#print (soup)
infos = soup.findAll(class_='content__list--item')
#print(infos)
for info in infos:
try:
data_house_code = info.attrs['data-house_code']
name = info.find(class_='content__list--item--aside').attrs['title']
price = info.find(class_='content__list--item--main').find(class_='content__list--item-price').find('em').get_text();
area = info.find(class_='content__list--item--main').find(class_='content__list--item--des').a.get_text();
addresses = info.find(class_='content__list--item--main').find(class_='content__list--item--des').findAll('a');
address = addresses[0].get_text()+'-'+addresses[1].get_text()+'-'+addresses[2].get_text()
tags = info.find(class_='content__list--item--main').find(class_='content__list--item--bottom').findAll('i');
tagStr = ''
for tag in tags:
if(tagStr!='') :
tagStr += '-'
tagStr += tag.get_text()
deleteSql = "delete from building_data where id = '"+data_house_code+"';"
database.execSql(deleteSql)
insertSql = "INSERT INTO building_data (id, name, adrress, area, price, location, bz) VALUES ('"+data_house_code+"', '"+name+"', '"+address+"', '"+area+"', '"+price+"', '', '"+tagStr+"');"
database.execSql(insertSql)
except Exception as e:
print(e)
print("睡眠5s")
time.sleep(5)
总结
我们用到的数据有时候不是现成的,需要从网上爬取。python提供了很好的爬虫包,有requests、BeautifulSoup. scrapy。可以直接导入。 1、首先安装需要用到的包 requests 和 BeautifulSoup。2、抓取和解析页面链家网的租房列表页,URL结构为:https://bj.lianjia.com/zufang/pg/bj表示城市 zufang是频道名称首页面码 我们要抓取的是北京的租房频道,所以前面的部分不会变。将URL分为两部分,前面的固定部分赋值给url,后面的可变部分使用for循环遍历页面。我们使用for循环生成,转化格式后于前面的URL固定部分拼成要抓取的URL。将抓取的页面保存到html中#循环抓取列表页信息。BeautifulSoup对页面进行解析#解析抓取的页面内容=BeautifulSoup(html,‘html.parser’)完成解析后,就开始对页面中的关键信息进行提取了。我们提取租房的价格、小区,地址,户型,面积,价格更新时间等信息。
希望对刚学习爬虫的小伙伴有帮助!(?˙▽˙?)
|