将刮取的数据移到CSV Fi中

2024-04-20 07:39:33 发布

您现在位置:Python中文网/ 问答频道 /正文

两部分的问题。。。。(请记住,我是新来的网站垃圾和BSoup!) 我能够创建一个代码,抓住一个论坛帖子的主题。但到目前为止,它只从论坛的第一页抓取了一些东西。我希望它能够一次抓取所有的页面,但不确切地知道如何处理这个问题。 我在网上读到,当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')])

Tags: csvimporthttpurlvaluehtmlaspage
1条回答
网友
1楼 · 发布于 2024-04-20 07:39:33

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

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函数。所以用subject.a.string代替container.a.contents。你知道吗

至于抓取后续页面,如果你已经弄清楚了网站的分页格式,那就可以了。你知道吗

相关问题 更多 >