Rumah > Soal Jawab > teks badan
巴扎黑2017-04-18 09:36:28
Pertama sekali, tidak perlu menggunakan modul csv
untuk memenuhi keperluan anda csv
menggunakan koma separuh lebar untuk memisahkan lajur yang berbeza secara lalai, tetapi jika kandungan satu lajur mempunyai separuh lebar. koma, excel
membaca agak janggal I Adalah disyorkan untuk menggunakan TAB
sebagai pemisah (pempisah), dan kemudian terus menggunakan with open(...) as fh
untuk menulis
Selain itu, terdapat dua masalah kecil dengan kod anda:
Fungsi get_data
sebenarnya hanya perlu dipanggil sekali sahaja, tidak perlu panggil dua kali
Terdapat garis miring tambahan dalam url/
# -*- coding:utf-8 -*-
import requests
from bs4 import BeautifulSoup
user_agent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36'
URL = 'http://finance.qq.com'
def get_data(url):
response = requests.get(url)
soup = BeautifulSoup(response.text, 'lxml')
soup = soup.find('p', {'id': 'listZone'}).findAll('a')
return soup
def main():
with open("hello.tsv", "w") as fh:
fh.write("url\ttitile\n")
for item in get_data(URL + "/gdyw.htm"):
fh.write("{}\t{}\n".format(URL + item.get("href"), item.get_text()))
if __name__ == "__main__":
main()
Keputusan:
ringa_lee2017-04-18 09:36:28
Oleh kerana anda menulis csvrow1 dahulu dan kemudian csvrow2, yang menghasilkan hasil ini anda harus melintasi csvrow1 dan 2 pada masa yang sama, seperti ini:
for i in zip(csvrow1, csvrow2):
csvfile.write(i[0] + ',' + i[1] + '\n')
伊谢尔伦2017-04-18 09:36:28
# -*- coding:utf-8 -*-
import requests
from bs4 import BeautifulSoup
import csv
user_agent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36'
def get_data(url):
response = requests.get(url)
soup = BeautifulSoup(response.text, 'lxml')
soup = soup.find('p', {'id': 'listZone'}).findAll('a')
return soup
urls = []
titles = []
for url in get_data('http://finance.qq.com/gdyw.htm'):
urls.append('http://finance.qq.com/'+url.get('href'))
for title in get_data('http://finance.qq.com/gdyw.htm'):
titles.append(title.get_text())
data = []
for url, title in zip(urls, titles):
row = {
'url': url,
'title': title
}
data.append(row)
with open('a.csv', 'w') as csvfile:
fieldnames = ['url', 'title']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
writer.writerows(data)