【问题标题】:Move scraped data into CSV File将抓取的数据移动到 CSV 文件中
【发布时间】:2017-12-19 00:26:21
【问题描述】:

两部分问题....(请记住,我是 webscraping 和 BSoup 的新手!) 我能够创建一个代码来获取论坛上帖子的主题。但截至目前,它只从论坛的第 1 页获取内容。我希望它能够一次抓取所有页面,但不完全确定如何去做。 我在网上读到,当 URL 发生轻微变化时,您可以对其进行更改,以便它遍历多个页面。

我要抓取的网址是: http://thailove.net/bbs/board.php?bo_table=ent 第 2 页是原始 url + "&page=2" 像这样的东西会起作用吗?: base_url + "&page=" str(2)

其次,我似乎无法将解析后的数据导出为 CSV 文件 这是我解析和导出数据的尝试:

from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup
import csv

my_url = 'http://thailove.net/bbs/board.php?bo_table=ent'

uClient = uReq(my_url)
page_html = uClient.read()
uClient.close()

page_soup = soup(page_html, "html.parser")

containers = page_soup.findAll("td",{"class":"td_subject"})
for container in containers:
    subject = container.a.contents[0]
    print("subject: ", subject)

with open('ThaiLove.csv', 'w') as f:
csv_writer = csv.writer(f)
for subject in containers:
        value = subject.a.string
        if value:
                csv_writer.writerow([value.encode('utf-8')])

【问题讨论】:

  • 当您尝试编写 csv 时会发生什么?
  • @snapcrack 它创建一个csv文件,内容为: b'\n \xec\x9d\xb4 \xea\xb2\x8c\xec\x8b\x9c\xeb\xac\xbc\xec \x9d\x80 \xeb\xac\xbb\xea\xb3\xa0\xeb\x8b\xb5\xed\x95\x98\xea\xb8\xb0 \xea\xb2\x8c\xec\x8b\x9c\xed\x8c \x90\xec\x9c\xbc\xeb\xa1\x9c \xec\x9d\xb4\xeb\x8f\x99 \xeb\x90\x98\xec\x97\x88\xec\x8a\xb5\xeb\x8b\x88 \xeb\x8b\xa4. ' 不知道发生了什么......

标签: python csv web-scraping beautifulsoup


【解决方案1】:

一些问题。首先,您不在这里编码。所以应该是:

containers = soup.findAll("td",{"class":"td_subject"})
for container in containers:
    subject = container.a.contents[0]
    print("subject: ", subject)

import csv

with open('ThaiLove.csv', 'w') as f:
    csv_writer = csv.writer(f)
    for subject in containers:
        value = subject.a.contents[0]
        if value:
            csv_writer.writerow([value])

全部不使用 UTF-8 编码。这给了我:

"\n                    미성년자도 이용하는 게시판이므로 글 수위를 지켜주세요.                    "\n"\n                    방꺽너이 방야이운하 수상보트를 타고 가서 볼만한 곳..                    "\n"\n                    방콕의 대표 야시장 - 딸랏롯파이2                    "\n"\n                    공항에서 제일 가까운 레드썬 마사지                    "\n"\n      

等等。

其次,您似乎在 csv 中写入了错误的内容。您实际上想将代码从 findAll 函数复制到 write 函数。所以你用container.a.contents代替subject.a.string

就抓取后续页面而言,如果您已经弄清楚了网站的分页格式,那应该可以正常工作。

【讨论】:

  • 感谢您在转换为 CSV 方面的帮助,这似乎可以解决问题。
猜你喜欢
  • 2018-06-06
  • 1970-01-01
  • 2017-05-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-24
  • 1970-01-01
  • 2021-07-06
  • 2020-10-11
相关资源
最近更新 更多