Maison > Questions et réponses > le corps du texte
巴扎黑2017-04-18 09:36:28
Tout d'abord, il n'est pas nécessaire d'utiliser le module csv
pour répondre à vos besoins csv
utilise des virgules demi-largeur pour séparer les différentes colonnes par défaut, mais si le contenu d'une seule colonne a une demi-largeur. virgules, excel
la lecture est un peu gênante. I Il est recommandé d'utiliser TAB
comme séparateur (délimiteur), puis d'utiliser directement with open(...) as fh
pour écrire
De plus, il y a deux petits problèmes avec votre code :
La fonction get_data
ne doit en fait être appelée qu'une seule fois, il n'est pas nécessaire de l'appeler deux fois
Il y a une barre oblique supplémentaire dans l'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()
Résultat :
ringa_lee2017-04-18 09:36:28
Parce que vous avez d'abord écrit csvrow1 puis csvrow2, ce qui a abouti à ce résultat, vous devez parcourir csvrow1 et 2 en même temps, comme ceci :
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)