将抓取的数据移动到CSV文件中

时间:2017-07-14 02:59:17

标签: python csv web-scraping beautifulsoup

两部分问题....(请记住我是webscraping和BSoup的新手!) 我能够创建一个代码来抓取论坛帖子的主题。但截至目前,它只从论坛的第1页抓取了这些内容。我希望它能够一次抓住所有页面,但不确定如何解决这个问题。 我在网上看到,当URL略有变化时,你可以改变它,以便迭代多个页面。

我想要抓的网址是: http://thailove.net/bbs/board.php?bo_table=ent 和第2页是原始网址+“& 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')])

1 个答案:

答案 0 :(得分:0)

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

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

至于抓取后续页面,如果你已经找到了网站的分页格式,那应该可以正常工作。