首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >爬行多页标题的Python问题

爬行多页标题的Python问题
EN

Stack Overflow用户
提问于 2020-06-11 15:36:03
回答 1查看 66关注 0票数 0

我是一个营销者,想用Python进行一些基本的市场调查。

我编写了一个简单的代码来爬行多页的标题,但是它不能将标题文本放在列表中并将其转换为Excel格式。在这种情况下我该怎么办?

我尝试创建一个list,并使用extend()方法将这些循环标题放到列表中,但是它没有工作:

代码语言:javascript
复制
import requests
import pandas as pd
from bs4 import BeautifulSoup

def content_get(url):
    count = 0
    while count < 4:                 #this case was to crawl titles of 4 pages
        r = requests.get(url)
        soup = BeautifulSoup(r.content, "html.parser")
        titles = soup.find(id="main-container").find_all("div", class_="r-ent")
        for title in titles:
            print([title.find('div', class_='title').text])
        nextpageurl = soup.find("a", string="‹ 上頁")["href"]
        url = "https://www.ptt.cc" + nextpageurl
        count += 1

firstpage = "https://www.ptt.cc/bbs/movie/index9002.html"
content_get(firstpage)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-14 03:47:58

您需要将标题添加到while循环之外的列表中:

代码语言:javascript
复制
def content_get(url):
    count = 0
    titles = []

    while count < 4:                
        r = requests.get(url)
        soup = BeautifulSoup(r.text)

        title_page = [title.text.replace('\n', '') for title in soup.find_all('div', {'class': 'title'})]            
        titles.extend(title_page)

        nextpageurl = soup.find("a", string="‹ 上頁")["href"]
        url = "https://www.ptt.cc" + nextpageurl
        count += 1
    return titles

如果不希望列表理解得到titles_page,可以用传统的for循环来替换:

代码语言:javascript
复制
titles_page = []
titles = soup.find_all('div', {'class': 'title'})
for title in titles:
    titles_page.append(title.text.replace('\n', ''))

对于excel文件:

代码语言:javascript
复制
def to_excel(text):
    df = pd.DataFrame(text, columns=['Title'])
    return df.to_excel('output.xlsx')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62328034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档