小白一枚,学习python爬虫中······纯当学习笔记了,大神勿喷。
今天,带来的是58同城单页商品数据爬取。
要用到的:
pycharm
chrome浏览器
python库:requests,Beautifulsoup4
任务分析:
1.解析当前页面
2.获取当前页面里每个商品的链接
3.剔除推广和转转商品
4.解析商品的链接,获取商品标题,价格,发布时间,区域的信息
一、解析当前页面
导入所需要的库文件
定义当前网址,提前创建一个空的列表用来放商品链接
定义一个函数用来获取商品链接
用requests的get方法发起网页请求
解析网页
右键检查商品列表
确定定位位置
用for循环和if条件判断结合剔除转转商品和推广商品,把剩余商品的链接(即获取的结果里的href里的内容)添加到列表real_url_list中
二、获取商品信息
定义获取商品信息的函数
调用获取商品链接的函数
用for循环遍历每一个商品链接,把商品信息装进data字典里并打印data
三、调用函数获取结果
完整代码如下:
import requests
from bs4 import BeautifulSoup
url='http://bj.58.com/pbdn/0/'
real_url_list=[]
def get_link():
wb_data=requests.get(url)
soup=BeautifulSoup(wb_data.text,'lxml')
real_url=soup.select('td.t a.t')
for i in real_url:
if str('jump')in str(i) or str('zhuanzhuan')in str(i):
pass
else:
real_url_list.append(i.get('href'))
return real_url_list
def get_item_info():
get_link()
for i in real_url_list:
wb_data=requests.get(i)
soup=BeautifulSoup(wb_data.text,'lxml')
data={
'title':soup.title.text,
'price':soup.select(' span.price')[0].text,
'time':soup.select('li.time')[0].text if soup.find_all('li','time')else None,
'area':list(soup.select( 'span.c_25d')[0].stripped_strings )if soup.find_all('span','c_25d')else None,
}
print(data)
get_item_info()
运行结果如下:
注意:
python对于缩进有着严格的要求,因为简书的markdown不太会用,所附代码的缩进并非是python默认的格式,但是对齐是正确的,若要复制代码运行参考对齐格式就好。
下期预告:
老司机带你飞,把煎蛋网的妹子图带回家