|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
import time
import requests
from bs4 import BeautifulSoup
import numpy as np
import pandas as pd
T=3000
template_url="https://tieba.baidu.com/f?kw=%E6%9D%91%E4%B8%8A%E6%98%A5%E6%A0%91&ie=utf-8&pn={}"
def extra_from_one_page(page_lst):
'''从一页中提取 帖子'''
tmp=[]
for i in page_lst:
if int(i.find(class_='threadlist_rep_num').text)>T:
dic={}
dic['num']=int(i.find(class_='threadlist_rep_num').text)
dic['name']=i.find(class_='threadlist_title').text
dic['address']='https://tieba.baidu.com'+i.find(class_='threadlist_title').a['href']
tmp.append(dic)
return tmp
def search_n_pages(n):
print('爬取n页数据')
target=[]
for i in range(n):
print('pages:',i)
target_url=template_url.format(50*i)
res=requests.get(target_url)
soup=BeautifulSoup(res.text,'html.parser')
page_lst=soup.find_all(class_='j_thread_list')
target.extend(extra_from_one_page(page_lst))
time.sleep(0.2)
return target
d=search_n_pages(10)
data=pd.DataFrame(d)
data.to_excel('村上春树吧.xlsx')
这段代码是用来爬取贴吧点击量超过某一阈值的帖子的,但是运行之后第12行报错了:
AttributeError: 'NoneType' object has no attribute 'text'
请问该如何修改?
你每页的第一个爬取数据是下面这个,没有 你选择的属性 - <li '="" class="j_thread_list thread_top j_thread_list clearfix" data-field='{"id":1,"author_name":null,"author_nickname":null,"author_portrait":null,"first_post_id":null,"reply_num":0,"is_bakan":null,"vid":null,"is_good":null,"is_top":true,"is_protal":null,"is_membertop":null,"is_multi_forum":null,"frs_tpoint":null}' data-floor="0" data-thread-type="0" data-tid="1">
- <div class="t_con cleafix">
- <a class="j_thread_hidden icon_thread_hidden" data-field='{"tid":1}' href="javascript:;" rel="noreferrer" title="点击隐藏本贴"></a>
- <div class="col2_left j_threadlist_li_left">
- </div>
- <div class="col2_right j_threadlist_li_right">
- <div class="threadlist_lz clearfix">
- <div class="threadlist_title pull_left j_th_tit">
- <i alt="招募" class="icon-bazhurecruit" title="招募"></i>
- <a class="j_th_tit" href="/bawu2/errorPage?bz=1" rel="noreferrer" target="_blank" title="本吧吧主火热招募中,点击参加">本吧吧主火热招募中,点击参加</a>
- </div> </div>
- </div>
- </div>
- </li>
复制代码
page_lst.pop(0),排除这个内容就行
|
|